01 Word Vectors
Lecture 1: Introduction and Word Vectors
Human language and word meaning
Word2vec introduction
Word2vec objective function gradients
Optimization basics
다음 강의: 02 GloVe
언어란 단순한 커뮤니케이션이 아니다.
더 높은 수준의 사고를 가능케 하는 도구이다.
Represent the meaning of a word
컴퓨터가 자연어를 어떻게 처리하는가에 앞서, 먼저 인간이 어떻게 언어를 다루는지에 대해 알아보자.
우리는 단어의 의미를 어떻게 표현할 수 있을까?
의미에 대한 가장 일반적인 사고방식은 아래의 그림처럼 tree 라는 단어는 가지각색의 실재 형상들에 대한 표현이라고 보는 것이다.
(단어와 일반화에서 더 깊게 다루어 보았고, 더 발전된 형태에 대한 초기 아이디어를 적어놓았지만 차치하고..)
이처럼 외연적 의미론에 따르면 언어는 심볼과 의미의 결합으로 이루어지며, 단어란 어떤 심볼을 가리킨다.
당연하게도 컴퓨터가 단어를 다루기 위해서는 심볼이 계산가능한 숫자로 표현되어야 한다.
따라서 one-hot vector가 초기에 사용되었다.
이런 경우 Vector의 차원은 사전에 존재하는 단어의 수와 같다. 대략, 500,000개 이상이다.
문제는 이러한 표현이 단어의 의미를 전혀 담아내지 못한다는 것이다. motel과 hotel은 의미적으로 매우 유사하지만, 수학적으로 두 벡터는 직교orthogonal이다. 완전히 독립적인 이산 기호로서의 역할밖에 못한다는 것이다.
따라서 의미를 담아낼 다른 방법을 고안하게 되었다.
Vector Semantics에서 여러가지 형태의 공기어 벡터를 다루어 보았지만, 무언가를 하나 깊게 다뤄보진 않았었다. 지금부터 조금 더 깊게 다뤄볼 예정이다.
Word vectors
"You shall know a word by the company it keeps", J.R. Firth 1957:11.
퍼스에 따르면 단어의 의미는 독립적으로 존재하는 것이 아니라 주변에 함께 쓰이는 단어들과의 관계(context) 속에서 결정된다.
이러한 아이디어에 착안해서 비슷한 맥락에서 사용되는 단어는 서로 유사성을 띠도록 단어의 체계를 구성하였다.
간단한 예시로 아래의 그림처럼 두 개의 단어 banking과 monetary를 이처럼 표현할 수 있다. 이 경우에 두 벡터의 내적을 통해 유의성이 표현된다. 각 차원의 부호가 같은 경우 유사성이 커지는 식으로 말이다.
이제 문제는 각 벡터의 차원값, 즉 파라미터들을 어떻게 학습할 수 있는가? 이다.
Word2vec: skip-gram
Word2vec은 단어를 벡터화시키기 위한 학습 프레임 워크이다.
Skip-gram은 Word2vec 기법 중 하나로, 주어진 중심단어(center word)로부터 주변부 단어(outside word, context word)를 예측하는 신경망 기반 학습 모델이다.
이 모델은 맥락을 학습하기 위함이다. 비슷한 맥락을 가진 단어는 함께 등장할 것이라는 의미이다.
중심 단어
결국 우리는 더 정확한
그렇기 위해서는 파라미터를 최대한 정확하게 구해야 한다.
이때 파라미터 학습은 Gradient Descent을 이용한다.
Gradient Descent
경사하강법을 사용하기 위해서는 우린 예측이 어긋날 경우 비용이 커지게 되는 함수를 정의해줘야 한다.
따라서 cost funtion
그라디언트 디센트 알고리즘을 통해 파라미터(
이때,
그렇다면,
정합한 문장과 맥락적 의미를 반영하기 위한 Likelihood Ftn
일단 우리가 원하는 글이 무엇인지에 대해 먼저 생각해야 한다. 우리는 단지 짧은 토막 문장만 만들어내는 모델을 원하는 것이 아니다. 문장이 뭉쳐 유기적인 글을 형성하기 원한다. 하지만 이를 위해 윈도우 사이즈를 지나치게 크게 한다면, 단어간 연관성이 형성되기 어렵다. 그래서 학습시키는 데이터 셋은 하나의 완성된 글의 형태를 통으로 학습하되 하나의 뭉텅이로 보는 윈도우 사이즈는 작게 만든다.
그래서 완성된 글이 서로 얼마나 유기적인지 그 정도를 나타내는 함수
여기서 단어간의 유기성을 학습하기 위한 윈도우 사이즈
문장간의 유기성을 학습하기 위한 중심단어 위치
( #Q 하지만 이게 최선일까?)
Objective Ftn(= cost or loss ftn)
우리 목표는 우도Likelihood를 최대화 하는것이다.
따라서
이때 곱연산은 미분하기 어렵기 때문에 로그를 합성하고,
How to express Probability
그래서 확률
중심 단어(center word)가 주어졌을 때, 다른 모든 단어들이 나오는 대신, 주변부 단어(outside or context word)가 등장할 확률이다.
이때 등장 확률은 유사성이 결정하며, 유사성은 내적으로 구한다.
여기에 소프트맥스softmax 함수를 사용하면 중심단어로부터 다른 모든 단어들과의 거리 중, 주변부 단어와 얼마나 가까운 상태인지를 확률로 표현할 수 있다.
이처럼 어떤
Calculating Gradient
우리는 다음과 같이 파라미터를 업데이트 하고 싶었다.
이제 우리는
참고로 차원 때문에 이해하는게 꽤 힘들었다.
전제:
참고로 위 식의 + 는 브로드캐스팅 합처럼 생각하면 된다.
엄밀하게 쓰기엔 길어서 줄여썼다.
그럼 우린 최종적으로 4가지 식에 대한 계산을 해야 한다.
가장 먼저 아래 식을 이해하는 것이 중요하다. 그러고 나면 나머지는 어렵지 않다.
이제 나머지 3개에 대해서도 연산하자
그리고 나머지 케이스인
계산이 길었는데, 이 값들이 J에 대한 그라디언트인건 아니므로 바로 써서는 안됨에 유의한다.
왜 두개의 벡터 UV를 쓰는지에 대한 설명추가